home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / tools / lu62 / proc / frecw.c < prev    next >
C/C++ Source or Header  |  1996-07-10  |  2KB  |  88 lines

  1. /*
  2.  * CopyRight 1995. Nicholas Poljakov all rights reserved.
  3.  */
  4. #include <malloc.h>
  5. #include <stdio.h>
  6. #include <dos.h>
  7. #include <recwait.h>
  8. #include <state1.h>
  9.  recwait (tp_id,
  10.            conv_id,
  11.            fill,
  12.            p_rc,
  13.            length,
  14.            max_length,
  15.            p_rts,
  16.            p_data,
  17.            p_wr)
  18.  
  19.  unsigned char *tp_id;
  20.  unsigned long conv_id;
  21.  unsigned char fill;
  22.  unsigned int *length ;
  23.  unsigned int max_length;
  24.  unsigned char *p_rts;
  25.  char far *p_data;
  26.  unsigned char *p_wr;
  27.  
  28.  struct   rc {
  29.  unsigned   int   prim ;
  30.  unsigned   long  sec  ; }  *p_rc;
  31.  
  32.          {
  33.   union REGS inregs,outregs;
  34.   struct SREGS segregs;
  35.   struct rcwait *ptr;
  36.   int l,i;
  37.        char _near *dp1;
  38.        char _near *dp2;
  39.   char *p;
  40.  
  41.      l = sizeof(struct rcwait);
  42.      if ((ptr = (char *)calloc(1,l)) == NULL)
  43.        {
  44.         p_rc->prim = PORT_BUSY; /* ¡ÑΓ ñ«ßΓπ»¡«⌐ »á¼∩Γ¿ */
  45.         p_rc->sec = 0x00;
  46.         return(0);
  47.         }
  48.  
  49.     ptr->code=Receive_and_wait; /* code primitiv */
  50.     ptr->e_cd=0x0000; /*  ex   */
  51.  
  52.     memcpy(ptr->tp_id,tp_id,8);
  53.  
  54.     ptr->conv_id = conv_id;
  55.     ptr->fill = fill;
  56.     ptr->maxlen=max_length;
  57.     ptr->data_lt=*length;
  58.     ptr->data_addr=p_data;
  59. /*
  60.      inregs.x.dx = FP_OFF(ptr);
  61.      segregs.ds = FP_SEG(ptr);
  62.      inregs.x.ax = ptr->code;
  63.  
  64.          int86x(0x68,&inregs,&outregs,&segregs);
  65.  */
  66.      dp1 = FP_OFF( ptr );
  67.      dp2 = FP_SEG( ptr );
  68.      _asm
  69.          {
  70.             push  ds
  71.             mov   dx, word ptr dp1[0]
  72.             mov   ax, word ptr dp2[0]
  73.             mov   ds, ax
  74.             mov   ax, Receive_and_wait
  75.             int   68h
  76.             pop   ds
  77.          }
  78.  
  79.      *p_wr = ptr->what_received;
  80.      *length = ptr->data_lt;
  81.      *p_rts = ptr->rts;
  82.  
  83.      p_rc->prim = ptr->prim_rc;
  84.      p_rc->sec  = ptr->sec_rc;
  85.      free(ptr);
  86.      return(0);
  87. }
  88.